import unittest

"""
 @author adun
 @date 2020/10/24 21:28
 
 Python 编程语言中有四种集合数据类型：
 列表（List）是一种有序和可更改的集合。允许重复的成员。【相当于Java的List】
 元组（Tuple）是一种有序且不可更改的集合。允许重复的成员。
 集合（Set）是一个无序和无索引的集合。没有重复的成员。【相当于Java的Set（TreeSet可以是有序的）】
 词典（Dictionary）是一个无序，可变和有索引的集合。没有重复的成员。【相当于Java的map】
"""


class MyTestCase(unittest.TestCase):
    # 定义全局列表
    global thislist
    thislist = ["apple", "banana", "cherry"]

    def test_something(self):
        #断言
        self.assertEqual(True, False)

    # 创建一个列表
    def test_create_list(self):
        print(thislist)

    # 打印列表的第二项
    def test_print_two(self):
        print(thislist[1])

    # 打印最后一项,负索引表示从末尾开始，-1 表示最后一个项目，-2 表示倒数第二个项目，依此类推。
    def test_last(self):
        print(thislist[-1])

    # 打印第三、四、五项【左闭右开】
    # 注释：搜索将从索引 2（包括）开始，到索引 5（不包括）结束。请记住，第一项的索引为 0。
    def test_threetofive(self):
        # 这里的thislist是局部变量
        thislist = ["apple", "banana", "cherry", "orange", "kiwi", "melon", "mango"]
        print(thislist[2:5])

    # 测试负数索引的范围
    # 如果要从列表末尾开始搜索，请指定负索引：
    def test_negative_number_index(self):
        thislist = ["apple", "banana", "cherry", "orange", "kiwi", "melon", "mango"]
        # 此例将返回从索引 - 4（包括）到索引 - 1（排除）的项目：
        print(thislist[-4:-1])
        print(thislist[-4:])

    # 更改项目值
    def test_update_val(self):
        thislist[1] = "mango"
        print(thislist)

    # 把值 "orange" 作为第二个元素插入 fruits 列表：
    def test_insert_val(self):
        fruits = ['apple', 'banana', 'cherry']
        print(fruits)
        fruits.insert(1, "orange")
        print(fruits)

    # 遍历列表
    def test_foreach(self):
        for x in thislist:
            print(x)

    # 检测列表中是否存在"apple"
    def test_contains(self):
        if "apple" in thislist:
            print("Yes,'apple' is in the fruits list")

    # 复制列表
    def test_copy_list(self):
        mylist = thislist.copy()
        print(mylist)

    # 删除与清空有本质的区别，【就像Java中clear()掏空与removeAll()】
    def test_del_one(self):
        thislist = ["apple", "banana", "cherry"]
        del thislist[0]
        print(thislist)

    def test_del_whole(self):
        thislist = ["apple", "banana", "cherry"]
        del thislist
        print(thislist) # UnboundLocalError: local variable 'thislist' referenced before assignment


    # 掏空【区别之处】
    def test_clear_list(self):
        thislist = ["apple", "banana", "cherry"]
        thislist.clear()
        print(thislist)


if __name__ == '__main__':
    unittest.main()
